06 ROS2 开发工具链使用
ROS2 开发工具链使用
关联:索引
colcon 是 ROS2 官方推荐的构建工具,核心作用是编译工作空间和功能包,替代了 ROS1 的 catkin_make。我们只需掌握 colcon build(编译)、colcon clean(清理)、colcon test(测试)三个核心命令,就能满足日常开发需求。
1. colcon build(核心编译命令)
作用:编译 ROS2 工作空间中的功能包,生成 build/install/log 目录。
核心参数与使用场景(记好这些,开发效率翻倍):
-
基础用法(编译整个工作空间):
colcon build --symlink-install
说明:
--symlink-install
是开发阶段必加参数!它使用符号链接安装 Python 脚本和配置文件。修改 Python 代码或配置文件后,无需重新编译,直接运行即可生效(C++ 代码仍需重新编译)。
-
只编译指定功能包(开发常用,速度快):
colcon build --packages-select 功能包名
例子:
colcon build --packages-select greensort_vision
(只编译视觉识别包)。
-
编译多个指定功能包:
colcon build --packages-select 包1 包2 -
编译功能包及其依赖:
colcon build --packages-up-to 功能包名
适用场景:新下载的功能包依赖未编译时,用此命令一键编译依赖和目标包。
关键提醒:
- 编译前必须进入工作空间根目录(如
cd ~/ros2_ws),不能在 src 目录直接编译。 - 编译报错先看 build 目录日志,若解决不了,可清理编译产物后重新编译。
2. colcon clean(清理编译产物命令)
作用:删除编译生成的 build/install/log 目录,解决编译缓存导致的报错问题。
核心用法:
注意:colcon clean 命令需要安装扩展包 python3-colcon-clean。如果未安装,推荐直接使用 rm 命令手动删除。
-
方法一:使用 colcon clean(需安装扩展)
-
清理所有编译产物(常用):
colcon clean workspace -
注:当前 colcon 版本仅支持
workspace(清理整个工作空间)或packages(清理指定包)子命令,不支持单独清理 build/install 目录。 -
方法二:手动清理(通用方法,推荐掌握)
-
清理所有产物:
rm -rf build install log -
仅清理特定包的缓存(进阶):进入 build 目录删除对应包的文件夹。
适用场景:
- 编译报错且日志无明确线索时;
- 切换功能包编译配置后(如修改 CMakeLists.txt);
- 工作空间目录混乱,想重新编译时。
3. colcon test(测试命令)
作用:运行功能包中编写的测试用例(如单元测试、集成测试),验证功能包功能是否正常。
核心用法:
-
测试整个工作空间的功能包:
colcon test -
只测试指定功能包:
colcon test --packages-select 功能包名 -
查看测试结果详情:
colcon test-result --all
适用场景:
- 小组项目开发中,验证功能包代码是否符合预期;
- 产业项目落地前,批量测试所有功能包的稳定性。
1. 分步操作(抄好指令,标清步骤)
- 步骤 0:环境配置(每次开新终端先做)
激活 ROS2 Humble 环境:
source /opt/ros/humble/setup.bash
检查:echo $ROS_DISTRO(输出 humble 才算对)
- 步骤 1:创建空工作空间(用于测试 colcon 命令)
指令:mkdir -p ~/colcon_test_ws/src
说明:创建名为 colcon_test_ws 的空工作空间,仅包含 src 目录。
- 步骤 2:进入工作空间根目录
指令:cd ~/colcon_test_ws
- 步骤 3:编译空工作空间(核心)
指令:colcon build --symlink-install
说明:编译后会生成 build/install/log 目录,验证空工作空间编译流程。
- 步骤 4:刷新环境变量(编译后必做)
指令:source install/setup.bash
说明:这一步非常重要!编译完成后必须 source 新生成的 setup.bash,否则系统找不到你刚编译的功能包。
- 步骤 5:清理编译产物
指令:colcon clean workspace
备选方案:若命令无效,可手动删除:
rm -rf build install log
说明:清理后 build/install/log 目录会被删除,验证清理命令效果。
- 步骤 6:重新编译并测试(可选)
指令:colcon build --symlink-install && colcon test
说明:空工作空间无测试用例,重点演示命令组合使用方式。
2. 实操小规范(必记,避免报错)
- 执行 colcon 命令前,务必确认当前终端目录是工作空间根目录(非 src 目录)。
- 开发阶段编译功能包,优先用
--packages-select参数,减少编译时间。 - 每次编译成功后,如果添加了新文件或新节点,建议重新
source install/setup.bash。
- 快速回顾(举手回答):colcon build 的核心参数是什么?清理编译产物的通用命令是什么?编译工作空间前要进入哪个目录?
ros2 命令行是 ROS2 开发的 “万能工具”,能完成节点运行、话题查看、服务调用、消息发布等所有核心操作,替代了 ROS1 的 rostopic/rosnode 等零散命令,核心逻辑是 ros2 + 子命令 + 操作对象。
1. 核心子命令分类(按功能记,不用背全)
| 子命令 | 作用 | 常用场景 |
|---|---|---|
ros2 run |
运行功能包中的节点 | 启动项目中的核心节点 |
ros2 node |
查看 / 管理节点(列表 / 信息) | 排查节点启动失败、重复节点 |
ros2 topic |
查看 / 发布话题(列表 / 消息 / 频率) | 调试数据传输、验证消息发布 |
ros2 interface |
查看消息/服务的数据结构接口定义 | 必学:发布消息前先查结构 |
ros2 service |
查看 / 调用服务(列表 / 信息 / 调用) | 调试服务通信、验证接口功能 |
ros2 log |
查看节点运行日志 | 排查节点运行报错 |
2. 实操技巧(提升效率,必记)
- 命令补全:终端输入
source /usr/share/colcon_argcomplete/hook/colcon-argcomplete.bash,之后输入 ros2 命令时按 Tab 键可自动补全(如ros2 top→ 按 Tab 补全为ros2 topic)。 - 可视化工具:除了命令行,还可以输入
rqt_graph打开可视化界面,直观看到节点和话题的关系,非常适合调试。 - 日志查看:运行节点后,用
ros2 log --level DEBUG查看详细日志;报错时,用ros2 log -g error只看错误日志。 - 快捷参数:
ros2 topic list -t(查看话题列表并显示消息类型)、ros2 service list -s(查看服务列表并显示服务类型)。
3. 小海龟案例实操(核心演示)
场景:运行小海龟节点,通过命令行控制小海龟移动,验证 ros2 命令行用法。
-
步骤 1:启动小海龟节点(新开终端)
# 别忘了设置 ROS_DOMAIN_ID source /opt/ros/humble/setup.bash ros2 run turtlesim turtlesim_node -
步骤 2:查看节点信息(新开终端)
ros2 node list # 查看运行的节点(输出 /turtlesim) ros2 node info /turtlesim # 查看节点的话题/服务信息 -
步骤 3:查看并发布话题(控制小海龟移动)
ros2 topic list # 查看话题(包含 /turtle1/cmd_vel) ros2 topic type /turtle1/cmd_vel # 查看话题消息类型(geometry_msgs/msg/Twist) # 【新增步骤】查看消息结构,知道该发什么数据 ros2 interface show geometry_msgs/msg/Twist # 输出包含:Vector3 linear 和 Vector3 angular # 发布速度指令,让小海龟直线移动 ros2 topic pub --once /turtle1/cmd_vel geometry_msgs/msg/Twist "{linear: {x: 2.0, y: 0.0, z: 0.0}, angular: {x: 0.0, y: 0.0, z: 0.0}}" -
步骤 4:查看并调用服务(生成新海龟)
ros2 service list # 查看服务(包含 /spawn) ros2 service call /spawn turtlesim/srv/Spawn "{x: 5.0, y: 5.0, theta: 0.0, name: 'turtle2'}"
4. 测试功能包实操(验证编译结果)
场景:创建测试功能包,编写简单节点,用 ros2 命令验证编译与运行结果。
-
步骤 1:创建测试功能包(进入 colcon_test_ws/src 目录)
# 添加 --license 参数养成好习惯 ros2 pkg create test_pkg --build-type ament_python --dependencies rclpy std_msgs --license Apache-2.0 -
步骤 2:编写简单发布节点(test_pkg/test_pkg/publisher_node.py)
import rclpy from rclpy.node import Node from std_msgs.msg import String class TestPublisher(Node): def __init__(self): super().__init__('test_publisher_node') self.publisher_ = self.create_publisher(String, 'test_topic', 10) timer_period = 1.0 self.timer = self.create_timer(timer_period, self.timer_callback) self.i = 0 def timer_callback(self): msg = String() msg.data = f'Hello ROS2! {self.i}' self.publisher_.publish(msg) self.get_logger().info(f'Publishing: "{msg.data}"') self.i += 1 def main(args=None): rclpy.init(args=args) test_publisher = TestPublisher() rclpy.spin(test_publisher) test_publisher.destroy_node() rclpy.shutdown() if __name__ == '__main__': main() -
步骤 3:修改 setup.py(添加入口点,确保能运行节点)
打开 test_pkg/setup.py 文件,找到 entry_points 字段,在 console_scripts 的中括号内添加:
entry_points={
'console_scripts': [
'publisher_node = test_pkg.publisher_node:main', # 添加这一行
],
},
-
步骤 4:编译并运行节点,验证话题发布
cd ~/colcon_test_ws && colcon build --packages-select test_pkg source install/setup.bash # 务必 source ros2 run test_pkg publisher_node # 运行发布节点 # 新开终端查看话题 ros2 topic list # 查看 test_topic 话题 ros2 topic echo test_topic # 查看话题发布的消息
1. 小组任务要求
结合你们小组的自选题项目,完成以下实操任务(填写实操任务表):
- 用 colcon 命令编译小组项目的功能包(优先用
--packages-select参数)。 - 用 ros2 run 运行项目中的一个核心节点,用
ros2 node list/info验证节点启动状态。 - 用
ros2 topic list/echo查看节点发布的话题及消息,用ros2 service list查看节点提供的服务。 - (可选)用
ros2 topic pub发布测试消息,验证节点是否能正常接收;用ros2 log查看节点运行日志。 - 使用 AI 查询 2 个不熟悉的 ros2 命令(如
ros2 param/ros2 action),梳理其在小组项目中的应用场景。
2. 指导要点
- 检查学生命令输入的准确性(如目录是否正确、参数是否完整)。
- 引导学生结合项目场景选择命令(如机械臂项目重点用
ros2 service call调用控制服务,视觉项目重点用ros2 topic echo查看图像话题)。 - 提醒学生使用命令补全技巧,提升实操效率;遇到问题优先用 AI 查询命令用法。
- AI 查询示例:
- 提问:“ros2 param 命令的用法,结合机械臂控制功能包举例”;
- 提问:“生成 ROS2 视觉识别项目常用的 ros2 命令清单,包含话题查看、消息发布、日志排查”。
- 核心技巧:
- 向 AI 提问时,明确 “命令 + 场景 + 功能包类型”,获取针对性答案;
- 用 AI 生成的命令清单整理成笔记,便于小组共享;
- 遇到命令报错时,复制报错信息给 AI,快速获取解决方案。
- 小知识:ROS2 命令行工具是工业级机器人开发的标配,不管是车企的自动驾驶项目,还是机器人企业的分拣 / 巡检项目,工程师都依赖命令行完成快速调试、批量验证,这是职业开发的核心技能。
- 职业习惯:高效使用开发工具(colcon/ros2 命令行)+ 借助 AI 提升效率,是现代机器人开发者的必备素养。规范的命令使用、清晰的实操思路,能让小组项目开发更高效,也能为未来进入产业界打下基础。
- 小鼓励:大家要熟练掌握这些工具,学会用 AI 解决问题,把工具变成 “提效神器”,让小组项目落地更顺畅。